#include <iostream>
#include <unistd.h>
#include <signal.h>
void Print(sigset_t &pending)
{
    for(int sig=31;sig>0;sig--)
    {
        if(sigismember(&pending,sig))
        {
            std::cout<< 1;
        }
        else
        {
            std::cout<< 0;
        }
    }
    std::cout<<std::endl;
}
// 打印pending表
//当前如果正在对n号信号进行处理，默认n号信号会被自动屏蔽
//对n号信号处理完成的时候，会自动解除对n号信号的屏蔽
void handler(int signum)
{
    std::cout << "get a sig: " << signum << std::endl;
    while (true)
    {
        sigset_t pending;
        sigpending(&pending);

        Print(pending);

        sleep(1);
    }
    exit(1);
 }
int main()
{
    struct sigaction act,ocat;
    act.sa_handler=handler;
    sigemptyset(&act.sa_mask); //初始化信号集，将act结构体中的sa_mask成员初始化为一个空的信号集
    sigaddset(&act.sa_mask,3); //将3号信号添加到act结构体中的sa_mask信号集；即阻塞3号信号
    act.sa_flags=0;

    for(int i=0;i<=31;i++) //遍历
    {
        sigaction(i,&act,&ocat);
    }

    while (true)
    {
        std::cout << "I am a process,pid: " << getpid() << std::endl;
        sleep(1);
    }

    return 0;
}   